home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / tools / s_tool / inp.c < prev    next >
Text File  |  1997-10-24  |  4KB  |  232 lines

  1. #include    "JX250.H"
  2. #include    <sys\iocs.h>
  3. #include    <sys\dos.h>
  4. #include    <sys\scsi.h>
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7. #include    <math.h>
  8. #include    <_tnb.c>
  9.  
  10. /*************************************************
  11.               文字入力(最大255字)
  12.     x,y = 座標
  13.     os  = 文字列アドレス(最上ビットが立っている場合初期数)
  14.     ln  = 最大入力文字列
  15.     bc  = バックカラー(ダミー)
  16.     m   = 1 ; 数字のみ 2 ; 小数認(os を 1/100 して使用)
  17.  注)TopWindowでない場合、ダイアログが開く
  18. *************************************************/
  19. UNchar    *InputStr(x,y,os,ln,bc,m)
  20. UNchar    *os;
  21. int    x,y,ln,bc,m;
  22. {
  23. int    c,i,j,z,zz,nk;
  24. int    cm;
  25. static    UNchar    buf[256];
  26. UNchar    buf_a[256];
  27. struct _fillptr PP;
  28.  
  29. buf[0]=buf[1]=0;
  30. _dos_kflushio(0xFF);
  31. _iocs_sp_regst(0,bit(31),0,0,-1,-1);
  32. z=0;
  33. MsPat(-1);
  34. for(i=0;c=os[i];i++){
  35.     if ( ZenChk(c) ){
  36.         if ( z+1<ln ){
  37.             buf_a[z]=1; buf[z++]=c;
  38.             buf_a[z]=2; buf[z++]=os[++i];
  39.         }
  40.     } else {
  41.         if ( z<ln ){
  42.             buf_a[z]=1; buf[z++]=c;
  43.         }
  44.     }
  45.     buf[z]=0;
  46. }
  47. buf[z]=0;        // END
  48. buf_a[z]=9;        // END
  49. zz=z;
  50. z=0;            // 一番左に
  51. nk=0;            // キー入力はしたか
  52. //--- 入力部分を白くする
  53. PP.x1=x;
  54. PP.y1=y;
  55. PP.x2=x+ln*6-1;
  56. PP.y2=y+12-1;
  57. PP.color=PalTable[15];
  58. /*書き替え*/
  59. CRTVDISP();
  60. _iocs_fill(&PP);
  61. p_12H(x,y,buf);
  62. cm=1;
  63. if ( nk==0 && m!=0 ){
  64.     for(i=0;i<ln;i++)
  65.         GGREV_H(VADDS(0,i*6+x+((z<ln)?z:ln-1)*6,y));        // カーソル
  66. } else {
  67.     GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y));        // カーソル
  68. }
  69. while( MS_RSW() );
  70. ONtim_set(1000);
  71. for(;;){
  72.     for(;;){
  73.         if ( (c=_dos_keysns())!=0 ){;
  74.             c=_dos_inkey();
  75.             break;
  76.         } elif ( MS_RSW() ){
  77.             c=0x3;
  78.             break;
  79.         }
  80.         if ( ONtim_count()>50 ){
  81.             if ( nk==0 && m!=0 ){
  82.                 ;
  83.             } else {
  84.                 cm=1-cm;
  85.                 GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y));        // カーソル
  86.             }
  87.             ONtim_set(1000);
  88.         }
  89.     }
  90.     //FepDisp();
  91.     if ( c==0xD ){
  92.         //--- CR
  93.         break;
  94.     } elif ( c==0x3 ){
  95.         //--- break
  96.         buf[0]=0;
  97.         buf[1]=255;
  98.         break;
  99.     } elif ( c==0x0B || c==0x0C ){
  100.         //--- HOME/CLR
  101.         buf[0]=buf[1]=0;
  102.         buf_a[0]=buf[1]=0;
  103.         z=zz=0;
  104.     } elif ( c==0x7 ){
  105.         //--- DEL
  106.         if ( z<zz ){
  107.             if ( buf_a[z]==1 && buf_a[z+1]==2 )
  108.                 z+=2;
  109.             else    z++;
  110.             j=1;
  111.             if ( buf_a[z-1]==2 )
  112.                 j=2;
  113.             z-=j;
  114.             zz-=j;
  115.             for(i=z;i<=255-j;i++){
  116.                 buf[i]=buf[i+j];
  117.                 buf_a[i]=buf_a[i+j];
  118.             }
  119.             ONtim_set(1000);
  120.         } else 
  121.             continue;
  122.     } elif ( c==0x8 ){
  123.         //--- BS
  124.         if ( z>0 ){
  125.             j=1;
  126.             if ( buf_a[z-1]==2 )
  127.                 j=2;
  128.             z-=j;
  129.             zz-=j;
  130.             for(i=z;i<=255-j;i++){
  131.                 buf[i]=buf[i+j];
  132.                 buf_a[i]=buf_a[i+j];
  133.             }
  134.             ONtim_set(1000);
  135.         } else
  136.             continue;
  137.     } elif ( c==0x1D ){
  138.         //--- 左
  139.         if ( z>0 ){
  140.             j=1;
  141.             if ( buf_a[z-1]==2 )
  142.                 j=2;
  143.             z-=j;
  144.             ONtim_set(1000);
  145.         } else
  146.             continue;
  147.     } elif ( c==0x1C ){
  148.         //--- 右
  149.         if ( z<zz ){
  150.             if ( buf_a[z]==1 && buf_a[z+1]==2 )
  151.                 z+=2;
  152.             else    z++;
  153.             ONtim_set(1000);
  154.         } else
  155.             continue;
  156.     } elif ( (c&0xFF)<0x20 || (c&0xFF)==0 ){
  157.         //--- CTRL
  158.         continue;
  159.     } else {
  160.         c&=0xFF;
  161.         if ( m==1 ){
  162.             if ( c>='0' && c<='9' || c=='-' )
  163.                 ;
  164.             else    continue;
  165.         } elif ( m==2 ){
  166.             if ( c>='0' && c<='9' || c=='.' || c=='-' )
  167.                 ;
  168.             else    continue;
  169.         }
  170.         if ( nk==0 && m!=0 ){
  171.             // 最初が数字キーなので
  172.             buf[0]=buf[1]=0;
  173.             buf_a[0]=buf_a[1]=0;
  174.             z=zz=0;
  175.         }
  176.         if ( ZenChk(c) ){
  177.             if ( zz+1<ln || m!=0 ){
  178.                 for(i=252;i>=z;i--){
  179.                     buf[i+2]=buf[i];
  180.                     buf_a[i+2]=buf_a[i];
  181.                 }
  182.                 buf_a[z]=1; buf[z++]=c;
  183.                 buf_a[z]=2; buf[z++]=_dos_inkey();
  184.                 zz+=2;
  185.             } else _dos_kflushio(0xFF);
  186.         } else {
  187.             if ( zz<ln || m!=0 ){
  188.                 for(i=253;i>=z;i--){
  189.                     buf[i+1]=buf[i];
  190.                     buf_a[i+1]=buf_a[i];
  191.                 }
  192.                 buf_a[z]=1; buf[z++]=c;
  193.                 zz++;
  194.             } else _dos_kflushio(0xFF);
  195.         }
  196.         ONtim_set(1000);
  197.     }
  198.     /*書き替え*/
  199.     CRTVDISP();
  200.     _iocs_fill(&PP);
  201.     if ( m!=0 ){
  202.         i=buf[ln];
  203.         buf[ln]=0;
  204.         p_12H(x,y,buf);
  205.         buf[ln]=i;
  206.     } else {
  207.         p_12H(x,y,buf);
  208.     }
  209.     cm=1;
  210.     nk=-1;
  211.     GGREV_H(VADDS(0,x+((z<ln)?z:ln-1)*6,y));        // カーソル
  212. }
  213. if ( cm ){
  214.     CRTVDISP();
  215.     _iocs_fill(&PP);
  216.     if ( m!=0 ){
  217.         i=buf[ln];
  218.         buf[ln]=0;
  219.         p_12H(x,y,buf);
  220.         buf[ln]=i;
  221.     } else {
  222.         p_12H(x,y,buf);
  223.     }
  224. }
  225. while( _dos_keysns() )
  226.     _dos_inkey();
  227. if ( m!=0 )
  228.     buf[ln]=0;
  229. MsPat(1);
  230. return(buf);
  231. }
  232.